package commandmode.impl;

import commandmode.base.BaseCommand;

/**
 * 宏命令
 * 执行这个命令 可以执行一堆其他的命令
 * @author yaojianfeng
 */
public class MacroCommand implements BaseCommand {
    BaseCommand [] commands;

    /**
     * 用一个命令数组进行初始化
     * @param commands 命令数组
     */
    public MacroCommand(BaseCommand[] commands) {
        this.commands = commands;
    }

    public MacroCommand() {
    }

    public void setCommands(BaseCommand[] commands) {
        this.commands = commands;
    }

    /**
     * 每种命令均实现该接口
     * 当这个宏命令被遥控器执行时,就一次性执行数组里的每个命令
     */
    @Override
    public void execute() {
        for (int i = 0; i < commands.length; i++) {
            commands[i].execute();
        }
    }

    /**
     * 撤销功能
     * 回退到上一步的操作状态
     */
    @Override
    public void undo() {
        for (int i = 0; i < commands.length; i++) {
            commands[i].undo();
        }
    }
}
